package integer;

/**
 * 包装类
 * java提供了8个包装类，分别对应8个基本类型
 * 由于基本类型是以值而非对象形式存在，因此没有面向对象特性，为了让基本类型可以参与面向
 * 对象开发，出现了8个包装类，目的是让基本类型可以以对象形式表示
 */
public class IntegerDemo1 {
    public static void main(String[] args) {
 /*
   基本类型          包装类
   byte             Byte
   short            Short
   int              Integer
   long             Long
   float            Float
   double           Double
   boolean          Boolean
   char             Character

  */
        int num = 128;
        Integer i1 =  Integer.valueOf(num);//Integer的valueOf缓存1字节只能整数对象
        Integer i2 = Integer.valueOf(num);
        System.out.println(i1 == i2);//false
        System.out.println(i1.equals(i2));//true

        double dou = 128.128;
        Double d1 = Double.valueOf(dou);//Double的valueOf内部就是直接new对象
        Double d2 = Double.valueOf(dou);
        System.out.println(d1 == d2);
        System.out.println(d1.equals(d2));

        /**
         * 数字类型的包装类都支持将其表示的数字以基本类型返回
         * 需要注意：与基本类型之间互相赋值一样，小类型赋值给大类型可直接赋值，而
         * 大类型往小类型上赋值可能丢失精度。
         */
        int in = i1.intValue();
        System.out.println(in);
        double dd = i1.doubleValue();
        System.out.println(dd);

        //包装类定义了两个常量用于获取取值范围
        //获取int最大值及最小值
        int imax = Integer.MAX_VALUE;
        int imin = Integer.MIN_VALUE;
        System.out.println(imax);
        System.out.println(imin);

          /*
           包装类可以将字符串解析为对应的基本类型，前提是该字符串正确描述了基本类型可以保存的值
          */
        String line = "123";
       // String line = "123.123";//不能解析为整数
        num = Integer.parseInt(line);
        System.out.println(num);
        dd = Double.parseDouble(line);
        System.out.println(dd);




    }
}
